// 
// File:   prism_symbols.h
// Author: cionescu
//
// Created on 8 January 2007, 14:42
//

#ifndef _prism_symbols_H
#define	_prism_symbols_H

using namespace std;
enum token_type {
    KEYWORD_TT=1, IDENT_TT=2, CONST_TT=3, OP_TT=4
};

enum rule_id {
    valueID, sumID, numexpID, binexpID, binexporID, 
    binexpandID, expressionID, updateID, probupdateID, updatesID,
    transition_defID, variable_defID
};

class token {
    string      m_string;
//  TODO add positioning information;
    int         m_type;
    
    protected:
    token(string s, int t) :m_string(s),m_type(t) {};
    public:
    void print_token() const { clog<<"token type:"<<m_type<<"| token string:"<<m_string<<endl; };
    int get_type() {  return m_type; }
    string get_string() { return m_string;}
};

class keyword_token : public token {    
    public:
    keyword_token(string s) :token(s,KEYWORD_TT){}
};

class ident_token : public token {
    
    public:
    ident_token(string s) :token(s,IDENT_TT){}
};

class const_token : public token {    
    public:
    const_token(string s) :token(s,CONST_TT){}
};

class op_token : public token {    
    public:
    op_token(string s) :token(s,OP_TT){ }
};

#endif	/* _prism_symbols_H */
